Repetitionsopgaver programmering
15. april 2000
Jeg har tilføjet nogle opgaver vedrørende databaser - det drejer sig primært om opgaver med SQL sætninger. Næste gang kommer der nogle opgaver vedrørende datastrukturer.
Basale kontrolstrukturer
Grafiske brugergrænseflader
Klasser og objekter
5. Klassen ProduktSpecifikation
6. Klassen ProduktSpecifikationCollection
Databaser
Basale kontrolstrukturer
De følgende opgaver løses i Console mode. Hjælp hertil findes i noten Udvikling af programmer i Borland C++ Builder.
Udarbejd et program, som kan bruges ved beregningen af gennemsnitshøjden for eleverne i klassen. De enkelte elevers højde indlæses via tastaturet. Når alle højder er indlæst, angives dette overfor programmet ved indtastning af tallet nul. Herefter udskrives gennemsnitshøjden på skærmen.
Udarbejd et program, som kan indlæse tre tal via tastaturet, og som derefter kan udskrive de tre tal på skærmen. Det mindste tal udskrives først og det største tal sidst.
Grafiske brugergrænseflader
Hjælp til de følgende opgaver kan findes i noten Visuel programmering med Borland C++ Builder SKNote06.ZIP
Udarbejd et program, som kan bruges ved beregningen af gennemsnitshøjden for eleverne i klassen. Der udarbejdes et skærmbillede efter nedenstående forbillede. De enkelte elevers højde indlæses enkeltvis i en EditBox (Højde). Hver indtastning afsluttes med tryk på knappen Registrér.
Herefter opdateres de øvrige felter: Antal (indtastede højder), Akkumuleret gennemsnit, højeste og laveste indtastede værdi.
Udarbejd et program som kan bruges til beregning af, hvordan et privat pantebrev amortiseres over et antal terminer. Inden beregningen påbegyndes skal nogle data indlæses og valideres. Restgæld er den aktuelle restgæld på lånet. Rentesats er rentesatsen pr. termin. Hvis renten f.eks. er 10% p.a. og der er aftalt 4 årlige terminer, er den rentesats, der skal indtastes 2,5%. Ydelse er det beløb, der afdrages ved hver termin. Det skal kontrolleres, at det indtastede beløb er større end renten i første termin.
De beregnede beløb for hver enkelt termin indsættes i en tabel (StringGrid). Beregningen fortsætter indtil der er beregnet 10 terminer frem i tiden, eller indtil restgælden bliver 0. Husk at reducere et eventuelt afdrag i sidste termin, så restgælden ikke bliver negativ.
Klasser og objekter
5. Klassen ProduktSpecifikation
Udarbejd klassen ProduktSpecifikation (inspireret af den gennemgående case hos Larman). Klassen skal have følgende attributter og metoder:
Attributter
description: Ansistring
price: float
upc: AnsiString
Metoder
Constructor samt set- og get-metoder til alle attributter
Udarbejd desuden et program, der kan bruges til aftestning af alle klassens metoder.
6. Klassen ProduktSpecifikationCollection
Udarbejd en klasse, der kan indeholde en collection af objekter af typen ProduktSpecifikation. Klassen skal have følgende attributter og metoder:
Attributter
collection: array med plads til 100 referencer til ProduktSpecifikation objekter.
count: integer // Antallet af aktuelle referencer
Metoder
Constructor
find(upc: AnsiString) : ProduktSpecifikation // afleverer null eller reference til fundne ProduktSpecifikation
load(filename: AnsiString) // Henter alle produkt specifikationer i en fil
save(filename: AnsiString) // Gemmer alle produkt specifikationer i en fil
Udarbejd desuden et program der kan bruges til aftestning af klassens
Databaser
Følgende relationelle database er defineret ved følgende tabeller. De understregede feltnavne er tabellernes primærnøgler.
Afdeling
Afdnr |
Integer |
Afdnavn |
String[30] |
Ansat
Medarbnr |
Integer |
Afdnr |
Integer |
Navn |
String[30] |
Adresse |
String[30] |
Postnr |
Integer |
Post
Postnr |
Integer |
Distrikt |
String[30] |
Projekt
Projektnr |
Integer |
Projektnavn |
String[30] |
Projektleder |
Integer |
ProjektMedarbejder
Projektnr |
Integer |
Medarbnr |
Integer |
Kompetence
Kompetencenr |
Integer |
Kompetencenavn |
String[30] |
Beskrivelse |
String[1024] |
MedarbejderKompetence
Medarbnr |
Integer |
Kompetencenr |
Integer |
Niveau |
Integer |
Udarbejd et diagram (f.eks. E/R diagram), der viser sammenhængen mellem de forskellige tabeller.
Udarbejd en SQL sætning, der kan oprette tabellen ansat.
Udarbejd en SQL sætning, som kan udskrive navn, adresse, postnr og distrikt på alle de medarbejdere, der er ansat i afdelingen med navnet "Økonomi".
Udarbejd en SQL sætning, som kan udskrive projektnavn, navn, adresse, postnr og distrikt for alle projektledere. Er en person leder for mere end ét projekt skal navnet kun udskrives én gang.
Udarbejd en SQL sætning, som kan udskrive navnene på alle de projekter, som ansatte fra afdelingen "Økonomi" medvirker i. Eventuelle fundne projektnavne skal kun medtages på listen én gang.
Udarbejd en SQL sætning, som kan udskrive antallet af medarbejder i afdelingen "Økonomi".
Udarbejd en SQL sætning, som kan udskrive navnene på alle de medarbejder, der medvirker i projektet med navnet "Økonomi system" og som har niveau 3 i kompetencen "C++ programmering".
Udarbejd en SQL sætning, som kan udskrive antallet af ansatte, der har et niveau højere end 2 i kompetencen "C++ programmering".